package com.education.ai.dao;

import com.education.ai.entity.Exercise;

import java.util.List;
import java.util.Optional;

/**
 * 练习题数据访问接口
 */
public interface ExerciseDao {
    
    /**
     * 查询所有练习题
     */
    List<Exercise> findAll();
    
    /**
     * 根据ID查询练习题
     */
    Optional<Exercise> findById(Long id);
    
    /**
     * 根据学科查询练习题
     */
    List<Exercise> findBySubject(String subject);
    
    /**
     * 根据年级查询练习题
     */
    List<Exercise> findByGrade(String grade);
    
    /**
     * 根据教学主题查询练习题
     */
    List<Exercise> findByTopic(String topic);
    
    /**
     * 根据题目类型查询练习题
     */
    List<Exercise> findByQuestionType(String questionType);
    
    /**
     * 根据难度查询练习题
     */
    List<Exercise> findByDifficulty(String difficulty);
    
    /**
     * 根据教师ID查询练习题
     */
    List<Exercise> findByTeacherId(String teacherId);
    
    /**
     * 根据学科和年级查询练习题
     */
    List<Exercise> findBySubjectAndGrade(String subject, String grade);
    
    /**
     * 根据学科、年级和难度查询练习题
     */
    List<Exercise> findBySubjectAndGradeAndDifficulty(String subject, String grade, String difficulty);
    
    /**
     * 根据学科、年级和主题查询练习题
     */
    List<Exercise> findBySubjectAndGradeAndTopic(String subject, String grade, String topic);
    
    /**
     * 分页查询练习题
     */
    List<Exercise> findWithPagination(int offset, int limit);
    
    /**
     * 保存练习题
     */
    Exercise save(Exercise exercise);
    
    /**
     * 批量保存练习题
     */
    List<Exercise> saveAll(List<Exercise> exercises);
    
    /**
     * 更新练习题
     */
    boolean update(Exercise exercise);
    
    /**
     * 删除练习题
     */
    boolean deleteById(Long id);
    
    /**
     * 查询练习题总数
     */
    long count();
    
    /**
     * 根据学科查询练习题总数
     */
    long countBySubject(String subject);
    
    /**
     * 根据学科和年级查询练习题总数
     */
    long countBySubjectAndGrade(String subject, String grade);
} 